<html>
    <head>
        <title>数据与方法</title>
    </head>
    <body>
        <script>
             // 二、数据与方法
                  /*
                        当一个Vue实例被创建时，它将 data 对象中的所有property加入大Vue的"响应式系统"中。
                        当这些property的值发生改变时，视图将会产生"响应"，即匹配更新为新的值。
                  */
                        // 我们的数据对象：
                        var data={a:1};

                        // 该对象被加入到一个Vue实例中：
                            var vm1= new Vue({
                                data:data
                            });

                        // data中的property被加入到Vue对象(实例)的响应系统，成为Vue对象的property.
                        // 所以以下表达式值为真
                            vm1.a===data.a;  // true

                        // 设置 vue.property 也会影响到原始数据
                            vm1.a=2;
                            data.a; // =>2

                        // 反之亦然
                            data.a=3;
                            vm1.a; // =>3

                        /*
                        当这些数据改变时，视图会进行重新渲染。
                        值得注意的是，只有当实例被创建时就已经存在于data中的property才是"响应式"的。
                        也就是说，如果你添加一个新的property：    
                        */  
                            vm1.b=5;
                        /*
                            那么对b的改动不会触发任何视图的更新。
                            如果你知道你会在晚些时候需要一个porperty,但是一开始它为空或不存在，那么你仅仅需要设置一个初始值。
                        */
                        // eg：
                            var data= {
                                        newTodoText: '',
                                        visitCount: 0,
                                        hideCompletedTodos: false,
                                        todos: [],
                                        error: null
                                }
                        // 这里唯一的例外是使用Object.freeze()来创建的"不可变对象"，
                        // 这也意味着这"响应系统"无法再追踪变化
                        var obj=Object.freeze({
                            a:1
                        });
                        new Vue({
                            el:'#app',
                            data:obj
                        });


                        /*
                        除了数据property,Vue实例还暴露了一些有用的实例property与方法。
                        它们都以前缀"$"开头，以便与用户定义的property区分开来
                        */
                        var data={a:1};
                        var vm=new Vue({
                            el:'#app',
                            data:data
                        });
                        vm.$data=== data; // true
                        vm.$el=== document.getElementById('app'); // true

                        // $watch是一个实例方法
                        vm.$watch('a',function(newValue,oldValue){
                            // 这个回调将在'vm.a'发生改变后调用
                        })

        </script>
    </body>
</html>